import fileinput, time

def input_dati(data_inizio, data_fine, nomefile):
	f = file(nomefile,'r')
	time_line = []
	for e in f.readlines():
		time_line.append(e)
	return time_line

def spezza_righe(a_string):#La funzione prende in input una stringa contenente ora inizio/fine e data inizio/fine riposo
				  #ritorna i singoli frammenti data inizio/fine e ora inizio/fine
		
	data_inizio = ''
	data_fine = ''	
	ora_inizio = ''
	ora_fine = ''
	data_inizio = a_string[0:a_string.find(',')]
	a_string = a_string[a_string.find(',')+1:]
	ora_inizio = a_string[0:a_string.find(',')]
	a_string = a_string[a_string.find(',')+1:]
	data_fine = a_string[0:a_string.find(',')]
	a_string = a_string[a_string.find(',')+1:]
	ora_fine = a_string[0:]
	return data_inizio, ora_inizio, data_fine, ora_fine

def spezza_data(data_string):
	giorno = 0 
	mese = 0
	anno = 0
	giorno = data_string[0:data_string.find('/')]
	data_string = data_string[data_string.find('/')+1:]
	mese = data_string[0:data_string.find('/')]
	data_string = data_string[data_string.find('/')+1:]
	anno = data_string[0:]
	return giorno, mese, anno

def spezza_ore(ore_string):
	ora = 0 
	minuti = 0
	if len(ore_string) == 3:#l'ora ha tre caratteri es. 937 
		ora = ore_string[:1]
		minuti = ore_string[1:]
	else:
		ora = ore_string[:2]
		minuti = ore_string[2:]
	return ora,minuti

def string_to_int(string_number):

	
	try:
		i = int(string_number)
	except ValueError:
		i = 0
	return i

def calcola_secondi(anno_i, mese_i, giorno_i, ora_i, minuti_i, anno_f, mese_f, giorno_f, ora_f, minuti_f):#prende i dati caratteristici di un riposo (inizio-fine)
						     							  #e ritorna il riposo in secondi 
	data_string_i = [string_to_int(anno_i), string_to_int(mese_i),string_to_int(giorno_i),string_to_int(ora_i),string_to_int(minuti_i),0,0,0,0]
	data_string_f = [string_to_int(anno_f), string_to_int(mese_f),string_to_int(giorno_f),string_to_int(ora_f),string_to_int(minuti_f),0,0,0,0]
	secondi_i = time.mktime(data_string_i)
	giorno_settimana_i, giorno_anno_i = time.gmtime(secondi_i)[6:8]
	secondi_f = time.mktime(data_string_f)
	giorno_settimana_f, giorno_anno_f = time.gmtime(secondi_f)[6:8]
	return secondi_f - secondi_i, giorno_settimana_i, giorno_anno_i, giorno_settimana_f, giorno_anno_f 

def is_i_t_notte(i_list):#True se inizio periodo riposo ricade nella fascia 0.00-6.00, False altrimenti
	secondi_i_t = 0
	secondi_f_t = 0
	secondi_i_r = 0
	inizio_t = [string_to_int(i_list[0]), string_to_int(i_list[1]),string_to_int(i_list[2]),string_to_int('0'),string_to_int('00'),0,0,0,0]
	fine_t = [string_to_int(i_list[0]), string_to_int(i_list[1]),string_to_int(i_list[2]),string_to_int('6'),string_to_int('00'),0,0,0,0]
	inizio_r = [string_to_int(i_list[0]), string_to_int(i_list[1]),string_to_int(i_list[2]),string_to_int(i_list[3]),string_to_int(i_list[4]),0,0,0,0]
	
	secondi_i_t = time.mktime(inizio_t)
	secondi_f_t = time.mktime(fine_t)
	secondi_i_r = time.mktime(inizio_r)
	
	if (secondi_i_r >= secondi_i_t) and (secondi_i_r <= secondi_f_t):
		return True
	return False	

def is_riposo_minimo(ore):
	if ore < 48:
		return True
	return False


def is_sabato_eo_domenica(g_inizio,g_fine):#verifica se le date input sono comprese tra sabato e/o domenica
					   #restituisce una coppia di valori true/false rispettivamente per la presenza
					   #di sabato(T/F) domenica(F/T) o entrambe (F/F) (T/T)
	day_list = []
	giorni_settimana = ['lunedi','martedi','mercoledi','giovedi','venerdi','sabato','domenica']
	while giorni_settimana[g_inizio] != giorni_settimana[g_fine]:
		day_list.append(giorni_settimana[g_inizio])
		g_inizio = (g_inizio + 1) % 7
	#if giorni_settimana[g_inizio] == giorni_settimana[g_fine]:
		#day_list.append(giorni_settimana[g_inizio])
	if day_list.count('sabato') > 0 and day_list.count('domenica')>0:
		return True,True
	if day_list.count('sabato')>0:
		return True,False
	if day_list.count('domenica')>0:
		return False,True
	else:
		return False,False	
	
	
	





#def is_sabato_o_domenica(g_inizio,g_fine):
	


#******************************************Main script************************************************************************	
giorni_settimana = ['lunedi','martedi','mercoledi','giovedi','venerdi','sabato','domenica']
mesi = ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'] 
aa = input_dati('21/9/2012','25/9/2012','turno')
ww = 0
monte_ore_riposo = 0
conta_quattordici = 0
conta_dodici = 0
while ww < len(aa):
	x,y,z,w =  spezza_righe(aa[ww])
	a,e,j = spezza_data(x)
	o,u = spezza_ore(y)
	test_notte_i = [j,e,a,o,u]
	h,i,l = spezza_data(z)
	#print 'hil',h,i,l
	m,n = spezza_ore(w)
	test_notte_f = [l,i,h,m,n]
	#print 'mn',m,n
	sec,d_w_i,d_y_i, d_w_f, d_y_f = calcola_secondi(j,e,a,o,u,l,i,h,m,n)
	monte_ore_riposo = monte_ore_riposo + sec
	real_sec = sec/3600
	ore = int(real_sec)
	minuti = (real_sec - int(real_sec) )* 60
	sabato,domenica = is_sabato_eo_domenica(d_w_i,d_w_f)
	print "Settimana %d-%d, riposo da %s %s/%s/%s a %s %s/%s/%s , durata %d h %d minuti \n" % (d_y_i/7,d_y_f/7,giorni_settimana[d_w_i],a,e,j ,giorni_settimana[d_w_f],h,i,l,ore,minuti)
	if is_i_t_notte(test_notte_i) and is_i_t_notte(test_notte_f): 
		print "Il riposo non puo terminare in 0.00-6.00 !\n"
	if is_riposo_minimo(ore):
		print "Riposo < 48h\n"
	if sabato and domenica:
		print"riposo sabato e domenica\n"
	elif sabato and (not domenica):
		print"|riposo sabato\n"
	elif not sabato and domenica:
		print"|riposo domenica\n"
	if (sabato and domenica)  and ore >= 60:#14 riposi di almeno 60 ore
		conta_quattordici = conta_quattordici + 1
	if (sabato or domenica) and ore >= 48:
		conta_dodici = conta_dodici + 1
	ww = ww + 1
print "Monte Ore Periodo esaminato %d ore" % ((monte_ore_riposo/3600))
print "I riposi coincidenti con Sabato e Domenica di almeno 60 ore sono:%d\n" %(conta_quattordici)
print "I riposi coincidenti con Sabato o Domenica di almeno 48 ore sono:%d\n" %(conta_dodici)


